package edu.qd.learn.newchapter.chapter04;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Vector;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * @author 布衣
 */
public class Question03 {

//    编写一个Java程序，找出一个字符串中出现次数最多的字符及其次数。
//            * 例如，输入"aaabbbbcc"，输出字符’b’和次数3

    public static void print01(String str) {
        char[] charArray = str.toCharArray();
        Arrays.sort(charArray);
        int sum = 0;
        Vector<Object> sumVector = new Vector<>();
        for (int i = 0, j = 1; i < charArray.length && j < charArray.length; j++) {
            if (charArray[i] != charArray[j]) {

                if (j - i > sum) {
                    sum = j - i;
                    sumVector.clear();
                    sumVector.add(charArray[i]);
                    sumVector.add(sum);
                } else if (j - i == sum) {
                    sumVector.add(charArray[i]);
                    sumVector.add(sum);
                }
                i = j;
            }
        }
        for (int i = 0; i < sumVector.size(); i += 2) {
            System.out.println("字符为=" + sumVector.get(i) + "次数=" + sumVector.get(i + 1));
        }
    }
//    public static void print01(String str) {
//        char[] charArray = str.toCharArray();
//        Arrays.sort(charArray);
//        int sum = 0;
//        Vector<Integer> sumVector = new Vector<>();
//        Vector<Character> cs = new Vector<>();
//        for (int i = 0, j = 1; i < charArray.length && j < charArray.length; j++) {
//            if (charArray[i] != charArray[j]) {
//
//                if(j - i > sum){
//                    sum = j-i;
//                    sumVector.clear();
//                    sumVector.add(sum);
//                    cs.clear();
//                    cs.add(charArray[i]);
//                }else if(j - i == sum){
//                    sumVector.add(sum);
//                    cs.add(charArray[i]);
//                }
//                i=j;
//            }
//        }
//        for (int i = 0; i < cs.size(); i++) {
//            System.out.println("字符为=" + cs.get(i)+"次数="+sumVector.get(i));
//        }
//    }


    public static void print02(String str) {
        Map<Character, Integer> restr = new HashMap<>();
        for (int i = 0; i < str.length(); i++) {
            Integer no = restr.getOrDefault(str.charAt(i), 0);
            restr.put(str.charAt(i), no + 1);
        }

        //求最大次数
        AtomicInteger sum = new AtomicInteger();
        for (Integer a : restr.values()) {
            if(sum.get() <a){
                sum.set(a);
            }
        }

        restr.forEach((k, v) -> {
            if(v == sum.get()){
                System.out.println("字符为=" + k + "次数=" + v);
            }
        });
    }

    public static void main(String[] args) {
        print02("aaabbbcc");
    }

}
